package study.core.rdd.action

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
 * 行动算子之aggregate操作
 * 分区的数据通过初始值和分区内的数据进行运算，然后再和初始值进行分区间的数据运算
 *
 * @author zh
 * @date 2021/5/16 13:32
 */
object TestAggregate {
  def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("rddMap")
    val context = new SparkContext(sparkConf)

    // 准备集合
    val list = List(1, 2, 3, 4)
    // 创建RDD
    val rdd: RDD[Int] = context.makeRDD(list, 2)

    // 与aggregateByKey相似   不过aggregate的初始值既参与分区内运算也参与分区间运算
    val result = rdd.aggregate(10)(_+_,_+_)

    // 40
    println(result)

    context.stop()
  }
}
